package com.xbaoziplus.simple_spring.beans.factory.support;

import com.xbaoziplus.simple_spring.beans.BeansException;
import com.xbaoziplus.simple_spring.beans.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * @author xbaozi
 * @version 1.0
 * @interfacename InstantiationStrategy
 * @date 2023-04-20  19:58
 * @description 接口负责创建对应于根 bean 定义的实例，负责实例化bean策略
 */
public interface InstantiationStrategy {

    /**
     * @description 返回自定义策略实例化的bean对象
     * @author xbaozi
     * @date 2023/4/20 20:01
     * @param beanDefinition    bean 定义
     * @param beanName  bean 名称
     * @param ctor      获取与入参信息相对应的构造函数，其中包含了一些必要的类信息
     * @param args      具体的入参信息
     **/
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor ctor, Object[] args) throws BeansException;
}
